home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / vlib250.zip / DIALOGS.C < prev    next >
C/C++ Source or Header  |  1994-10-17  |  10KB  |  385 lines

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "visualib.h"
  4. #include "vlibdemo.h"
  5. #include "dialogs.h"
  6.  
  7. static POINT3D    p3;
  8. static POINT2D    p2;
  9.  
  10. BOOLEAN    DlgInputPoint3D (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  11. {
  12.     char    buf[20];
  13.     REAL    x;
  14.  
  15.     switch (msg) {
  16.         case WM_INITDIALOG:
  17.             sprintf (buf, "%.3f", (REAL) p3.x);
  18.             SetDlgItemText (hdlg, XCOORD, buf);
  19.             sprintf (buf, "%.3f", (REAL) p3.y);
  20.             SetDlgItemText (hdlg, YCOORD, buf);
  21.             sprintf (buf, "%.3f", (REAL) p3.z);
  22.             SetDlgItemText (hdlg, ZCOORD, buf);
  23.             return (TRUE);
  24.         case WM_COMMAND:
  25.             switch (wp) {
  26.                 case IDOK:
  27.                     GetDlgItemText (hdlg, XCOORD, buf, 20);
  28.                     if (sscanf (buf, "%f", &x))
  29.                         p3.x = x;
  30.                     GetDlgItemText (hdlg, YCOORD, buf, 20);
  31.                     if (sscanf (buf, "%f", &x))
  32.                         p3.y = x;
  33.                     GetDlgItemText (hdlg, ZCOORD, buf, 20);
  34.                     if (sscanf (buf, "%f", &x))
  35.                         p3.z = x;
  36.                     EndDialog (hdlg, TRUE);
  37.                     return (TRUE);
  38.  
  39.                 case IDCANCEL:
  40.                     EndDialog (hdlg, TRUE);
  41.                     break;
  42.             }
  43.             break;
  44.     }
  45.     return (FALSE);                  /* Didn't process a message    */
  46. }
  47.  
  48. BOOLEAN    InputPoint3D (LPPOINT3D p)
  49. {
  50.     BOOL    flag;
  51.     
  52.     p3 = *p;
  53.     flag = DialogBox (hinst, MAKEINTRESOURCE(DLGSETPOINT3D), NULL, DlgInputPoint3D) > 0;
  54.     if (flag)
  55.         *p = p3;
  56.     return (flag);
  57. }
  58.  
  59. BOOLEAN DlgInputPoint2D (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  60. {
  61.     char    buf[20];
  62.     REAL    x;
  63.  
  64.     switch (msg) {
  65.         case WM_INITDIALOG:
  66.             sprintf (buf, "%.3f", (REAL) p2.x);
  67.             SetDlgItemText (hdlg, XCOORD, buf);
  68.             sprintf (buf, "%.3f", (REAL) p2.y);
  69.             SetDlgItemText (hdlg, YCOORD, buf);
  70.             return (TRUE);
  71.         case WM_COMMAND:
  72.             switch (wp) {
  73.                 case IDOK:
  74.                     GetDlgItemText (hdlg, XCOORD, buf, 20);
  75.                     if (sscanf (buf, "%f", &x))
  76.                         p2.x = x;
  77.                     GetDlgItemText (hdlg, YCOORD, buf, 20);
  78.                     if (sscanf (buf, "%f", &x))
  79.                         p2.y = x;
  80.                     EndDialog (hdlg, TRUE);
  81.                     return (TRUE);
  82.  
  83.                 case IDCANCEL:
  84.                     EndDialog (hdlg, TRUE);
  85.                     break;
  86.             }
  87.             break;
  88.     }
  89.     return (FALSE);                  /* Didn't process a message    */
  90. }
  91.  
  92. BOOLEAN    InputPoint2D (LPPOINT2D p)
  93. {
  94.     BOOL    flag;
  95.     
  96.     p2 = *p;
  97.     flag = DialogBox (hinst, MAKEINTRESOURCE(DLGSETPOINT2D), NULL, DlgInputPoint2D) > 0;
  98.     if (flag)
  99.         *p = p2;
  100.     return (flag);
  101. }
  102.  
  103. BOOLEAN    DlgLightSetup (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  104. {
  105.     char    buf[20];
  106.     REAL    x, lx, ly, lz, dx, dy, dz;
  107.     BOOL    lighton;
  108.     COLORREF color;
  109.  
  110.     switch (msg) {
  111.         case WM_INITDIALOG:
  112.             GetLightLocation (VL_CURRENT, &lx, &ly, &lz);
  113.             GetLightDirection (VL_CURRENT, &dx, &dy, &dz);
  114.             lighton = SwitchLight (VL_CURRENT, VL_INQUIRE);
  115.             
  116.             sprintf (buf, "%.3f", (REAL) lx);
  117.             SetDlgItemText (hdlg, LIGHTLOCX, buf);
  118.             sprintf (buf, "%.3f", (REAL) ly);
  119.             SetDlgItemText (hdlg, LIGHTLOCY, buf);
  120.             sprintf (buf, "%.3f", (REAL) lz);
  121.             SetDlgItemText (hdlg, LIGHTLOCZ, buf);
  122.             
  123.             sprintf (buf, "%.3f", (REAL) dx);
  124.             SetDlgItemText (hdlg, LIGHTDIRX, buf);
  125.             sprintf (buf, "%.3f", (REAL) dy);
  126.             SetDlgItemText (hdlg, LIGHTDIRY, buf);
  127.             sprintf (buf, "%.3f", (REAL) dz);
  128.             SetDlgItemText (hdlg, LIGHTDIRZ, buf);
  129.  
  130.             CheckDlgButton (hdlg, LIGHTON, lighton);
  131.             
  132.             return (TRUE);
  133.         case WM_COMMAND:
  134.             switch (wp) {
  135.                 case LIGHTCOLOR:
  136.                     color = LightColor (VL_CURRENT, VL_INQUIRE);
  137.                     color = SelectColor (color);
  138.                     LightColor (VL_CURRENT, color);
  139.                     return (TRUE);
  140.             
  141.                 case IDOK:
  142.                     GetDlgItemText (hdlg, LIGHTLOCX, buf, 20);
  143.                     if (sscanf (buf, "%f", &x))
  144.                         lx = x;
  145.                     GetDlgItemText (hdlg, LIGHTLOCY, buf, 20);
  146.                     if (sscanf (buf, "%f", &x))
  147.                         ly = x;
  148.                     GetDlgItemText (hdlg, LIGHTLOCZ, buf, 20);
  149.                     if (sscanf (buf, "%f", &x))
  150.                         lz = x;
  151.                     
  152.                     GetDlgItemText (hdlg, LIGHTDIRX, buf, 20);
  153.                     if (sscanf (buf, "%f", &x))
  154.                         dx = x;
  155.                     GetDlgItemText (hdlg, LIGHTDIRY, buf, 20);
  156.                     if (sscanf (buf, "%f", &x))
  157.                         dy = x;
  158.                     GetDlgItemText (hdlg, LIGHTDIRZ, buf, 20);
  159.                     if (sscanf (buf, "%f", &x))
  160.                         dz = x;
  161.                     
  162.                     lighton = IsDlgButtonChecked (hdlg, LIGHTON);
  163.                     
  164.                     SetLightLocation (VL_CURRENT, lx, ly, lz);
  165.                     SetLightDirection (VL_CURRENT, dx, dy, dz);
  166.                     SwitchLight (VL_CURRENT, lighton);
  167.                     
  168.                     EndDialog (hdlg, TRUE);
  169.                     return (TRUE);
  170.  
  171.                 case IDCANCEL:
  172.                     EndDialog (hdlg, TRUE);
  173.                     break;
  174.             }
  175.             break;
  176.     }
  177.     return (FALSE);                  /* Didn't process a message    */
  178. }
  179.  
  180.  
  181. BOOLEAN DlgMaterial (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  182. {
  183.     COLORREF color;
  184.     
  185.     switch (msg) {
  186.         case WM_INITDIALOG:
  187.             return (TRUE);
  188.             
  189.         case WM_COMMAND:
  190.             switch (wp) {
  191.                 case MATDIFFUSE:
  192.                     color = MaterialDiffuse (VL_CURRENT, VL_INQUIRE);
  193.                     color = SelectColor (color);
  194.                     MaterialDiffuse (VL_CURRENT, color);
  195.                     return (TRUE);
  196.                 case MATAMBIENT:
  197.                     color = MaterialAmbient (VL_CURRENT, VL_INQUIRE);
  198.                     color = SelectColor (color);
  199.                     MaterialAmbient (VL_CURRENT, color);
  200.                     return (TRUE);
  201.                 case MATSPECULAR:
  202.                     color = MaterialSpecular (VL_CURRENT, VL_INQUIRE);
  203.                     color = SelectColor (color);
  204.                     MaterialSpecular (VL_CURRENT, color);
  205.                     return (TRUE);
  206.                 case MATEMISSION:
  207.                     color = MaterialEmission (VL_CURRENT, VL_INQUIRE);
  208.                     color = SelectColor (color);
  209.                     MaterialEmission (VL_CURRENT, color);
  210.                     return (TRUE);
  211.             
  212.                 case IDOK:
  213.                     EndDialog (hdlg, TRUE);
  214.                     return (TRUE);
  215.  
  216.                 case IDCANCEL:
  217.                     EndDialog (hdlg, TRUE);
  218.                     break;
  219.             }
  220.             break;
  221.     }
  222.     return (FALSE);                  /* Didn't process a message    */
  223. }
  224.  
  225. BOOLEAN    DlgTexture (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  226. {
  227.     static WORD texture = TEXTURENONE;
  228.     static WORD check1, check2, check3, check4;
  229.     
  230.     switch (msg) {
  231.         case WM_INITDIALOG:
  232.             CheckRadioButton (hdlg, TEXTURENONE, TEXTUREGRANITE, texture);
  233.             check1 = ShadingPerturbation (VL_PERTURBMATERIAL, VL_INQUIRE);
  234.             CheckDlgButton (hdlg, IDC_CHECK1, check1);
  235.             check2 = ShadingPerturbation (VL_PERTURBNORMAL, VL_INQUIRE);
  236.             CheckDlgButton (hdlg, IDC_CHECK2, check2);
  237.             check3 = ShadingPerturbation (VL_PERTURBPIXEL, VL_INQUIRE);
  238.             CheckDlgButton (hdlg, IDC_CHECK3, check3);
  239.             check4 = ShadingPerturbation (VL_PERTURBFACET, VL_INQUIRE);
  240.             CheckDlgButton (hdlg, IDC_CHECK4, check4);
  241.             return (TRUE);
  242.             
  243.         case WM_COMMAND:
  244.             switch (wp) {
  245.                 case TEXTURENONE:
  246.                 case TEXTUREMARBLE:
  247.                 case TEXTUREWOOD:
  248.                 case TEXTUREGRANITE:
  249.                     texture = wp;
  250.                     CheckRadioButton (hdlg, TEXTURENONE, TEXTUREWOOD, wp);
  251.                     return (TRUE);
  252.                 case IDC_CHECK1:
  253.                     check1 = !check1;
  254.                     CheckDlgButton (hdlg, IDC_CHECK1, check1);
  255.                     break;
  256.                 case IDC_CHECK2:
  257.                     check2 = !check2;
  258.                     CheckDlgButton (hdlg, IDC_CHECK2, check2);
  259.                     break;
  260.                 case IDC_CHECK3:
  261.                     check3 = !check3;
  262.                     CheckDlgButton (hdlg, IDC_CHECK3, check3);
  263.                     break;
  264.                 case IDC_CHECK4:
  265.                     check4 = !check4;
  266.                     CheckDlgButton (hdlg, IDC_CHECK4, check4);
  267.                     break;
  268.                 case IDOK:
  269.                     switch (texture) {
  270.                         case TEXTUREMARBLE:
  271.                             SolidTexture (VL_MARBLE);
  272.                             break;
  273.                         case TEXTUREWOOD:
  274.                             SolidTexture (VL_WOODGRAIN);
  275.                             break;
  276.                         case TEXTUREGRANITE:
  277.                             SolidTexture (VL_GRANITE);
  278.                             break;
  279.                         default:
  280.                             SolidTexture (VL_NONE);
  281.                             break;
  282.                     }
  283.                     ShadingPerturbation (VL_PERTURBMATERIAL, check1);
  284.                     ShadingPerturbation (VL_PERTURBNORMAL, check2);
  285.                     ShadingPerturbation (VL_PERTURBPIXEL, check3);
  286.                     ShadingPerturbation (VL_PERTURBFACET, check4);
  287.                     EndDialog (hdlg, TRUE);
  288.                     return (TRUE);
  289.  
  290.                 case IDCANCEL:
  291.                     EndDialog (hdlg, TRUE);
  292.                     break;
  293.             }
  294.             break;
  295.     }
  296.     return (FALSE);                  /* Didn't process a message    */
  297. }
  298.  
  299. BOOLEAN DlgShading (HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
  300. {
  301.     static int mode, mbutton;
  302.     
  303.     switch (msg) {
  304.         case WM_INITDIALOG:
  305.             mode = ShadingMethod (VL_INQUIRE);
  306.             switch (mode){
  307.                 case VL_WIREFRAME:
  308.                     mbutton = WIREFRAME;
  309.                     break;
  310.                 case VL_SOLIDFILL:
  311.                     mbutton = SOLIDFILL;
  312.                     break;
  313.                 case VL_FLATSHADE:
  314.                     mbutton = FLATSHADING;
  315.                     break;
  316.                 case VL_GOURAUDSHADE:
  317.                     mbutton = GOURAUD;
  318.                     break;
  319.                 case VL_PHONGSHADE:
  320.                     mbutton = PHONG;
  321.                     break;
  322.                 case VL_SPECULARMODEL:
  323.                     break;
  324.             }
  325.             CheckRadioButton (hdlg, WIREFRAME, SPECULAR, mbutton);
  326.             
  327.             CheckDlgButton (hdlg, DEPTHBUFFER, DepthBuffer (VL_INQUIRE));
  328.             CheckDlgButton (hdlg, LOCALVIEWER, LocalViewer (VL_INQUIRE));
  329.             CheckDlgButton (hdlg, TWOSIDE, TwoSideShading (VL_INQUIRE));
  330.             CheckDlgButton (hdlg, BACKFACEREM, BackFaceRemoval (VL_INQUIRE));
  331.  
  332.             return (TRUE);
  333.             
  334.         case WM_COMMAND:
  335.             switch (wp) {
  336.                 case WIREFRAME:
  337.                 case SOLIDFILL:
  338.                 case FLATSHADING:
  339.                 case GOURAUD:
  340.                 case PHONG:
  341.                 case SPECULAR:
  342.                     mbutton = wp;
  343.                     CheckRadioButton (hdlg, WIREFRAME, SPECULAR, wp);
  344.                     return (TRUE);
  345.             
  346.                 case IDOK:
  347.                     switch (mbutton) {
  348.                         case WIREFRAME:
  349.                             mode = VL_WIREFRAME;
  350.                             break;
  351.                         case SOLIDFILL:
  352.                             mode = VL_SOLIDFILL;
  353.                             break;
  354.                         case FLATSHADING:
  355.                             mode = VL_FLATSHADE;
  356.                             break;
  357.                         case GOURAUD:
  358.                             mode = VL_GOURAUDSHADE;
  359.                             break;
  360.                         case PHONG:
  361.                             mode = VL_PHONGSHADE;
  362.                             break;
  363.                         case SPECULAR:
  364.                             mode = VL_PHONGSHADE;
  365.                             break;
  366.                     }
  367.                     ShadingMethod (mode);
  368.                     
  369.                     DepthBuffer (IsDlgButtonChecked (hdlg, DEPTHBUFFER));
  370.                     LocalViewer (IsDlgButtonChecked (hdlg, LOCALVIEWER));
  371.                     TwoSideShading (IsDlgButtonChecked (hdlg, TWOSIDE));
  372.                     BackFaceRemoval (IsDlgButtonChecked (hdlg, BACKFACEREM));
  373.  
  374.                     EndDialog (hdlg, TRUE);
  375.                     return (TRUE);
  376.  
  377.                 case IDCANCEL:
  378.                     EndDialog (hdlg, TRUE);
  379.                     break;
  380.             }
  381.             break;
  382.     }
  383.     return (FALSE);                  /* Didn't process a message    */
  384. }
  385.